সি শার্পে (C#) অ্যারে এবং কালেকশন ডেটার একটি গ্রুপ একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে হলো একটি নির্দিষ্ট আকারের ডেটা সংরক্ষণ করার কাঠামো, আর কালেকশন হলো ডাইনামিক আকারের ডেটা সংরক্ষণ করার কাঠামো, যেখানে প্রয়োজন অনুসারে নতুন ডেটা যোগ বা সরানো যায়। কালেকশন সাধারণত বেশি ফ্লেক্সিবল এবং একাধিক ডেটা টাইপ সমর্থন করে।
অ্যারে হলো একই ডেটা টাইপের একাধিক আইটেম সংরক্ষণ করার জন্য ব্যবহৃত একটি ফিক্সড-সাইজের ডেটা স্ট্রাকচার। একবার অ্যারের আকার নির্ধারণ করা হলে, তা পরিবর্তন করা সম্ভব হয় না।
int[] numbers = new int[5]; // আকার নির্ধারণ করে একটি ইন্টিজার অ্যারে তৈরি করা
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
অথবা, সরাসরি অ্যারের মান ইনিশিয়ালাইজ করা যায়:
csharp
Copy code
int[] numbers = { 10, 20, 30, 40, 50 };
class Program
{
static void Main(string[] args)
{
int[] numbers = { 10, 20, 30, 40, 50 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine("Element at index " + i + ": " + numbers[i]);
}
}
}
আউটপুট:
Element at index 0: 10
Element at index 1: 20
Element at index 2: 30
Element at index 3: 40
Element at index 4: 50
কালেকশন হলো ডাইনামিক ডেটা স্ট্রাকচার, যা অ্যারের তুলনায় আরো বেশি ফ্লেক্সিবল এবং ম্যানেজমেন্ট সহজ। C# এ বিভিন্ন ধরনের কালেকশন রয়েছে, যেমন List
, Dictionary
, Queue
, এবং Stack
। System.Collections
এবং System.Collections.Generic
লাইব্রেরিতে কালেকশন ক্লাসগুলি পাওয়া যায়।
List
ব্যবহারList
একটি জেনেরিক কালেকশন যা ডাইনামিক আকারের। এটি অ্যারের তুলনায় বেশি ফ্লেক্সিবল এবং Add
, Remove
, Insert
ইত্যাদি মেথড সমর্থন করে।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List numbers = new List { 10, 20, 30, 40, 50 };
numbers.Add(60); // Add new element
numbers.Remove(20); // Remove element
foreach (int number in numbers)
{
Console.WriteLine("Number: " + number);
}
}
}
আউটপুট:
Number: 10
Number: 30
Number: 40
Number: 50
Number: 60
Dictionary
ব্যবহারDictionary
কী-ভ্যালু পেয়ার আকারে ডেটা সংরক্ষণ করে, যেখানে TKey
হলো কী এবং TValue
হলো ভ্যালু।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Dictionary students = new Dictionary();
students.Add(101, "Alice");
students.Add(102, "Bob");
students.Add(103, "Charlie");
foreach (KeyValuePair student in students)
{
Console.WriteLine("ID: " + student.Key + ", Name: " + student.Value);
}
}
}
আউটপুট:
ID: 101, Name: Alice
ID: 102, Name: Bob
ID: 103, Name: Charlie
Queue
ব্যবহারQueue
FIFO (First-In-First-Out) ভিত্তিক একটি কালেকশন, যেখানে প্রথমে যোগ করা ডেটা প্রথমে সরানো হয়।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Queue queue = new Queue();
queue.Enqueue("Alice");
queue.Enqueue("Bob");
queue.Enqueue("Charlie");
Console.WriteLine("Dequeue: " + queue.Dequeue()); // Output: Alice
foreach (string person in queue)
{
Console.WriteLine("Person: " + person);
}
}
}
আউটপুট:
Dequeue: Alice
Person: Bob
Person: Charlie
Stack
ব্যবহারStack
LIFO (Last-In-First-Out) ভিত্তিক একটি কালেকশন, যেখানে সর্বশেষে যোগ করা ডেটা প্রথমে সরানো হয়।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Stack stack = new Stack();
stack.Push("Alice");
stack.Push("Bob");
stack.Push("Charlie");
Console.WriteLine("Pop: " + stack.Pop()); // Output: Charlie
foreach (string person in stack)
{
Console.WriteLine("Person: " + person);
}
}
}
আউটপুট:
Pop: Charlie
Person: Bob
Person: Alice
বৈশিষ্ট্য | অ্যারে | কালেকশন |
---|---|---|
আকার | নির্দিষ্ট (fixed) | ডাইনামিক (dynamic) |
ডেটা টাইপ | একক ডেটা টাইপ | একাধিক ধরনের ডেটা সংরক্ষণ করা যায় |
মেম্বার মেথড | সীমিত | .Add() , .Remove() , .Insert() , ইত্যাদি |
কাজের ধরন | সহজ এবং দ্রুত | বহুমুখী এবং ফ্লেক্সিবল |
সি শার্পে অ্যারে হলো একটি নির্দিষ্ট আকারের ডেটা স্ট্রাকচার যা একই ধরনের ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। কালেকশন হলো ডাইনামিক ডেটা স্ট্রাকচার যা ডেটা সংরক্ষণ এবং ম্যানেজমেন্টে আরও বেশি ফ্লেক্সিবল। কালেকশন বিভিন্ন ধরনের ডেটা সংরক্ষণ করতে পারে এবং এতে ডেটা যোগ বা সরানোর মেথডও থাকে। অ্যারে এবং কালেকশন সঠিকভাবে ব্যবহার করে ডেটা স্ট্রাকচারিং এবং ম্যানেজমেন্ট সহজ হয়।
সি শার্পে (C#) অ্যারে (Array) হলো একই ধরনের একাধিক মান সংরক্ষণ করার জন্য ব্যবহৃত ডেটা স্ট্রাকচার। অ্যারে একটি স্থির দৈর্ঘ্যের সংগ্রহ যেখানে ইনডেক্স ব্যবহার করে প্রতিটি উপাদানে অ্যাক্সেস করা যায়। সি শার্পে সাধারণত একমাত্রিক এবং বহু-মাত্রিক অ্যারে ব্যবহার করা হয়।
একমাত্রিক অ্যারে একটি সরল লাইন আকারে উপাদান সংরক্ষণ করে। এতে প্রতিটি উপাদান একটি নির্দিষ্ট ইনডেক্সে থাকে যা শূন্য থেকে শুরু হয়।
// একমাত্রিক অ্যারে ডিক্লেয়ারেশন
int[] numbers = new int[5]; // দৈর্ঘ্য ৫, সব উপাদান ০ দ্বারা ইনিশিয়ালাইজড
// একত্রে ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন
int[] scores = { 90, 85, 88, 92, 87 };
int firstScore = scores[0]; // প্রথম উপাদান
scores[1] = 95; // দ্বিতীয় উপাদানের মান পরিবর্তন
using System;
namespace OneDimensionalArrayExample
{
class Program
{
static void Main(string[] args)
{
int[] numbers = { 10, 20, 30, 40, 50 };
// অ্যারের প্রতিটি উপাদান প্রদর্শন
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine("Element at index " + i + ": " + numbers[i]);
}
}
}
}
আউটপুট:
Element at index 0: 10
Element at index 1: 20
Element at index 2: 30
Element at index 3: 40
Element at index 4: 50
বহু-মাত্রিক অ্যারে একাধিক মাত্রায় ডেটা সংরক্ষণ করতে সক্ষম। সাধারণত ২-মাত্রিক (যেমন, rows x columns
), ৩-মাত্রিক বা আরও বেশি মাত্রার অ্যারে ব্যবহার করা হয়।
২-মাত্রিক অ্যারে টেবিল বা ম্যাট্রিক্স আকারে ডেটা সংরক্ষণ করতে ব্যবহৃত হয়।
দ্বিমাত্রিক অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন
// ২-মাত্রিক অ্যারে ডিক্লেয়ারেশন
int[,] matrix = new int[3, 2]; // 3x2 ম্যাট্রিক্স, ৩টি সারি এবং ২টি কলাম
// ডিক্লেয়ার এবং ইনিশিয়ালাইজেশন একসাথে
int[,] grid = {
{ 1, 2 },
{ 3, 4 },
{ 5, 6 }
};
int value = grid[1, 1]; // ২য় সারি এবং ২য় কলাম
grid[2, 0] = 9; // ৩য় সারি এবং ১ম কলামের মান পরিবর্তন
using System;
namespace MultiDimensionalArrayExample
{
class Program
{
static void Main(string[] args)
{
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
// অ্যারের প্রতিটি উপাদান প্রদর্শন
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
Console.Write(matrix[i, j] + " ");
}
Console.WriteLine();
}
}
}
}
আউটপুট:
1 2 3
4 5 6
7 8 9
জাগড অ্যারে হলো এমন একটি অ্যারে যার প্রতিটি উপাদান আবার একটি অ্যারে ধারণ করে। প্রতিটি সাব-অ্যারের দৈর্ঘ্য ভিন্ন হতে পারে।
int[][] jaggedArray = new int[3][]; // তিনটি অ্যারে ধারণ করবে
jaggedArray[0] = new int[] { 1, 2 };
jaggedArray[1] = new int[] { 3, 4, 5 };
jaggedArray[2] = new int[] { 6 };
using System;
namespace JaggedArrayExample
{
class Program
{
static void Main(string[] args)
{
int[][] jaggedArray = {
new int[] { 1, 2, 3 },
new int[] { 4, 5 },
new int[] { 6, 7, 8, 9 }
};
for (int i = 0; i < jaggedArray.Length; i++)
{
for (int j = 0; j < jaggedArray[i].Length; j++)
{
Console.Write(jaggedArray[i][j] + " ");
}
Console.WriteLine();
}
}
}
}
আউটপুট:
1 2 3
4 5
6 7 8 9
বৈশিষ্ট্য | একমাত্রিক অ্যারে | বহু-মাত্রিক অ্যারে |
---|---|---|
স্ট্রাকচার | এক লাইনে উপাদান রাখা | গ্রিড বা ম্যাট্রিক্স আকারে |
ইনডেক্স | একটি ইনডেক্স ব্যবহার | প্রতিটি মাত্রার জন্য ইনডেক্স |
সাধারণ ব্যবহার | সোজা ডেটা তালিকা | টেবিল, ম্যাট্রিক্স, ইত্যাদি |
সি শার্পে অ্যারে একই ধরনের একাধিক ডেটা সংরক্ষণে ব্যবহার করা হয়। একমাত্রিক অ্যারে এক লাইনে ডেটা সংরক্ষণ করে, যেখানে বহু-মাত্রিক অ্যারে টেবিল বা ম্যাট্রিক্স আকারে ডেটা সংরক্ষণ করে। জাগড অ্যারে একাধিক আকারের সাব-অ্যারে ধারণ করতে পারে, যা ডেটা সংরক্ষণে আরও নমনীয়তা প্রদান করে।
সি শার্পে (C#) ArrayList, List<T>, এবং Dictionary<TKey, TValue> হলো ডেটা সংরক্ষণ এবং ম্যানেজমেন্টের জন্য ব্যবহৃত কালেকশনগুলোর উদাহরণ। এগুলোর মাধ্যমে ডাইনামিক ডেটা ম্যানেজমেন্ট, কী-ভ্যালু পেয়ার, এবং জেনেরিক টাইপের ডেটা সংরক্ষণ করা যায়।
ArrayList হলো একটি নন-জেনেরিক কালেকশন, যা System.Collections
নেমস্পেসে পাওয়া যায়। এটি যেকোনো ধরনের ডেটা সংরক্ষণ করতে পারে, এবং অ্যারের তুলনায় এর আকার ডাইনামিকভাবে বাড়ানো বা কমানো যায়। যেহেতু এটি নন-জেনেরিক, তাই object
টাইপে যেকোনো ধরনের ডেটা সংরক্ষণ করা যায়, কিন্তু টাইপ সেফটি নিশ্চিত করে না।
using System;
using System.Collections;
class Program
{
static void Main(string[] args)
{
ArrayList arrayList = new ArrayList();
// Adding elements
arrayList.Add(10);
arrayList.Add("Alice");
arrayList.Add(3.14);
arrayList.Add(true);
// Displaying elements
foreach (var item in arrayList)
{
Console.WriteLine("Element: " + item);
}
// Removing element
arrayList.Remove("Alice");
// Displaying after removal
Console.WriteLine("\nAfter Removal:");
foreach (var item in arrayList)
{
Console.WriteLine("Element: " + item);
}
}
}
আউটপুট:
Element: 10
Element: Alice
Element: 3.14
Element: True
After Removal:
Element: 10
Element: 3.14
Element: True
List<T> হলো একটি জেনেরিক কালেকশন, যা System.Collections.Generic
নেমস্পেসে পাওয়া যায়। এটি শুধুমাত্র নির্দিষ্ট ডেটা টাইপের আইটেম সংরক্ষণ করে এবং টাইপ সেফটি নিশ্চিত করে। List<T>
অ্যারে থেকে বেশি ফ্লেক্সিবল, এবং এতে .Add()
, .Remove()
, .Insert()
ইত্যাদি মেথড রয়েছে।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<int> numbers = new List<int> { 10, 20, 30 };
// Adding elements
numbers.Add(40);
numbers.Add(50);
// Displaying elements
foreach (int number in numbers)
{
Console.WriteLine("Number: " + number);
}
// Removing element
numbers.Remove(20);
// Displaying after removal
Console.WriteLine("\nAfter Removal:");
foreach (int number in numbers)
{
Console.WriteLine("Number: " + number);
}
}
}
আউটপুট:
Number: 10
Number: 20
Number: 30
Number: 40
Number: 50
After Removal:
Number: 10
Number: 30
Number: 40
Number: 50
Dictionary<TKey, TValue> হলো একটি কী-ভ্যালু পেয়ার কালেকশন, যা System.Collections.Generic
নেমস্পেসে পাওয়া যায়। এটি একটি নির্দিষ্ট কী এবং মানের সমন্বয়ে ডেটা সংরক্ষণ করে এবং ডুপ্লিকেট কী সমর্থন করে না। ডিকশনারি সাধারণত দ্রুত অনুসন্ধানের জন্য ব্যবহৃত হয়, এবং এর মাধ্যমে কী ব্যবহার করে মানে দ্রুত অ্যাক্সেস করা যায়।
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Dictionary<int, string> students = new Dictionary<int, string>();
// Adding elements
students.Add(101, "Alice");
students.Add(102, "Bob");
students.Add(103, "Charlie");
// Displaying elements
foreach (KeyValuePair<int, string> student in students)
{
Console.WriteLine("ID: " + student.Key + ", Name: " + student.Value);
}
// Removing an element by key
students.Remove(102);
// Displaying after removal
Console.WriteLine("\nAfter Removal:");
foreach (KeyValuePair<int, string> student in students)
{
Console.WriteLine("ID: " + student.Key + ", Name: " + student.Value);
}
}
}
আউটপুট:
ID: 101, Name: Alice
ID: 102, Name: Bob
ID: 103, Name: Charlie
After Removal:
ID: 101, Name: Alice
ID: 103, Name: Charlie
বৈশিষ্ট্য | ArrayList | List<T> | Dictionary<TKey, TValue> |
---|---|---|---|
টাইপ সেফটি | না | হ্যাঁ | হ্যাঁ |
অ্যাড এবং রিমুভ | .Add() , .Remove() | .Add() , .Remove() | .Add() , .Remove(key) |
ইনডেক্স অনুযায়ী অ্যাক্সেস | হ্যাঁ | হ্যাঁ | না, কিন্তু কী ব্যবহার করে মান অ্যাক্সেসযোগ্য |
কী-ভ্যালু পেয়ার | না | না | হ্যাঁ, কী-ভ্যালু পেয়ার |
ব্যবহারের সহজতা | যেকোনো ধরনের ডেটা সংরক্ষণযোগ্য | নির্দিষ্ট ডেটা টাইপ সংরক্ষণযোগ্য | দ্রুত অনুসন্ধান এবং কী-ভিত্তিক অ্যাক্সেসযোগ্য |
সি শার্পে ArrayList, List<T>, এবং Dictionary<TKey, TValue> ডেটা সংরক্ষণ এবং ম্যানেজমেন্টের জন্য ব্যবহৃত কালেকশন। ArrayList হলো একটি নন-জেনেরিক কালেকশন, যা যেকোনো ধরনের ডেটা সংরক্ষণ করতে পারে, কিন্তু টাইপ সেফ নয়। List<T> হলো জেনেরিক এবং টাইপ সেফ, যেখানে নির্দিষ্ট ডেটা টাইপ সংরক্ষণ করা যায়। Dictionary<TKey, TValue> হলো একটি কী-ভ্যালু পেয়ার কালেকশন, যা দ্রুত অনুসন্ধান এবং কী ভিত্তিক ডেটা অ্যাক্সেসের জন্য ব্যবহৃত হয়।
লিংকড লিস্ট এবং সেট ডেটা স্ট্রাকচার সি শার্পে (C#) ব্যবহৃত হয় ডেটা সংরক্ষণ এবং অ্যাক্সেসের জন্য। প্রতিটি স্ট্রাকচার বিভিন্ন উদ্দেশ্যে কার্যকর এবং তাদের নিজস্ব সুবিধা ও সীমাবদ্ধতা রয়েছে। লিংকড লিস্ট এবং সেট সম্পর্কে বিস্তারিত আলোচনা করা হলো।
লিংকড লিস্ট হলো একটি ডেটা স্ট্রাকচার, যেখানে ডেটা উপাদানগুলো আলাদা আলাদা নোড হিসেবে সংরক্ষিত থাকে। প্রতিটি নোডে একটি ডেটা এবং একটি পয়েন্টার থাকে যা পরবর্তী নোডের ঠিকানা ধারণ করে।
সি শার্পে LinkedList<T>
জেনেরিক ক্লাস ব্যবহার করে লিংকড লিস্ট তৈরি করা হয়। এটি System.Collections.Generic
নেমস্পেসের অন্তর্ভুক্ত।
using System;
using System.Collections.Generic;
namespace LinkedListExample
{
class Program
{
static void Main(string[] args)
{
// লিংকড লিস্ট ডিক্লেয়ারেশন এবং ইনিশিয়ালাইজেশন
LinkedList<string> names = new LinkedList<string>();
// লিংকড লিস্টে উপাদান যোগ করা
names.AddLast("Alice");
names.AddLast("Bob");
names.AddFirst("Charlie");
// লিংকড লিস্ট প্রদর্শন
foreach (string name in names)
{
Console.WriteLine(name);
}
// নির্দিষ্ট অবস্থানে উপাদান যোগ করা
LinkedListNode<string> node = names.Find("Alice");
names.AddAfter(node, "Dave");
Console.WriteLine("\nAfter Adding 'Dave' After 'Alice':");
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
}
আউটপুট:
plaintext
Copy code
Charlie
Alice
Bob
After Adding 'Dave' After 'Alice':
Charlie
Alice
Dave
Bob
সেট হলো এমন একটি ডেটা স্ট্রাকচার, যেখানে ডুপ্লিকেট উপাদান রাখা হয় না। প্রতিটি উপাদান সেটে অনন্য হয় এবং সেটে উপাদানগুলোর কোন নির্দিষ্ট ক্রম থাকে না।
সি শার্পে HashSet<T>
এবং SortedSet<T>
ক্লাস ব্যবহার করে সেট তৈরি করা হয়।
using System;
using System.Collections.Generic;
namespace SetExample
{
class Program
{
static void Main(string[] args)
{
HashSet<int> numbers = new HashSet<int>();
// সেটে উপাদান যোগ করা
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
numbers.Add(20); // ডুপ্লিকেট, তাই সেটে যোগ হবে না
Console.WriteLine("HashSet Elements:");
foreach (int number in numbers)
{
Console.WriteLine(number);
}
// একটি নির্দিষ্ট উপাদান আছে কিনা যাচাই
Console.WriteLine("\nContains 20: " + numbers.Contains(20));
}
}
}
আউটপুট:
HashSet Elements:
10
20
30
Contains 20: True
using System;
using System.Collections.Generic;
namespace SortedSetExample
{
class Program
{
static void Main(string[] args)
{
SortedSet<string> fruits = new SortedSet<string>();
// SortedSet এ উপাদান যোগ করা
fruits.Add("Apple");
fruits.Add("Banana");
fruits.Add("Mango");
fruits.Add("Banana"); // ডুপ্লিকেট, তাই সেটে যোগ হবে না
Console.WriteLine("SortedSet Elements:");
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
}
}
}
আউটপুট:
SortedSet Elements:
Apple
Banana
Mango
HashSet
-এ অনুসন্ধান অপারেশন দ্রুত সম্পন্ন হয়।SortedSet
উপাদানগুলোকে স্বয়ংক্রিয়ভাবে ক্রমানুসারে রাখে।HashSet
-এ উপাদানগুলোর কোনো নির্দিষ্ট ক্রম থাকে না।বৈশিষ্ট্য | লিংকড লিস্ট | সেট |
---|---|---|
ডুপ্লিকেট | ডুপ্লিকেট সংরক্ষণ করা যায় | ডুপ্লিকেট অনুমোদিত নয় |
ইনডেক্স | ইনডেক্স ব্যবহারে সরাসরি অ্যাক্সেস নেই | ইনডেক্স ব্যবহারে সরাসরি অ্যাক্সেস নেই |
সংরক্ষণ | পয়েন্টার ভিত্তিক | হ্যাশ বা সটিং ভিত্তিক |
ব্যবহার | ডাইনামিক আকারের তালিকা | অনন্য উপাদানের সংগ্রহ |
ক্রম | ইনডেক্স ভিত্তিক, সাধারণত ক্রম থাকে | HashSet -এ কোনো ক্রম নেই; SortedSet -এ ক্রমানুসারে থাকে |
সি শার্পে লিংকড লিস্ট এবং সেট বিভিন্ন ধরনের ডেটা সংরক্ষণের জন্য কার্যকর। লিংকড লিস্ট ডায়নামিক আকারের তালিকা তৈরি করতে সহায়ক, যেখানে সহজে উপাদান যোগ এবং মুছে ফেলা যায়। অন্যদিকে, সেট ডুপ্লিকেট উপাদান ছাড়া একটি সংগ্রহ তৈরি করতে ব্যবহৃত হয় এবং সাধারণত দ্রুত অনুসন্ধান ও ক্রমানুসারে উপাদান সংরক্ষণ করতে সাহায্য করে।
আরও দেখুন...